home *** CD-ROM | disk | FTP | other *** search
/ AMIGA-CD 2 / Amiga-CD - Volume 2.iso / gepackte_disketten / 1994 / 08_94_5.dms / 08_94_5.adf / term-4.0-Source.lha / PhonePanel.c < prev    next >
C/C++ Source or Header  |  1994-07-12  |  46KB  |  2,069 lines

  1. /*
  2. **    PhonePanel.c
  3. **
  4. **    The phonebook and support routines
  5. **
  6. **    Copyright © 1990-1994 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12.     /* Gadget IDs. */
  13.  
  14. enum    {    GAD_NAMELIST,        GAD_EDIT,
  15.         GAD_NAME,        GAD_COMMENT,        GAD_PHONENUMBER,    GAD_QUICKMENU,
  16.         GAD_NEWENTRY,        GAD_DIALLIST,        GAD_LOADLIST,        GAD_COPYCONFIG,
  17.         GAD_CLONEENTRY,        GAD_CLEARLIST,        GAD_SORTLIST,        GAD_PASSWORD,
  18.         GAD_REMOVEENTRY,    GAD_USEIT,        GAD_SAVELIST,        GAD_PRINT,
  19.         GAD_TAG,        GAD_UNTAG,        GAD_TAG_ALL,        GAD_TOGGLE_ALL,
  20.         GAD_CANCEL
  21.     };
  22.  
  23.     /* Editing IDs. */
  24.  
  25. enum    {    EDIT_SERIAL,        EDIT_MODEM,        EDIT_SCREEN,        EDIT_TERMINAL,
  26.         EDIT_EMULATION,        EDIT_CLIPBOARD,        EDIT_CAPTURE,        EDIT_COMMANDS,
  27.         EDIT_MISC,        EDIT_PATHS,        EDIT_TRANSFER,        EDIT_TRANSLATION,
  28.         EDIT_KEYMACROS,        EDIT_CURSORKEYS,
  29.         EDIT_FASTMACROS,    EDIT_PASSWORD,        EDIT_RATES };
  30.  
  31.     /* What action is to follow clicking into the listview. */
  32.  
  33. enum    {    CLICK_NONE,CLICK_SELECT,CLICK_TOGGLE,CLICK_DIAL };
  34.  
  35.     /* Some hints. */
  36.  
  37. STATIC LONG LastSelected,LastNumPhoneEntries;
  38.  
  39.     /* ListViewRender():
  40.      *
  41.      *    This callback routine is responsible for rendering
  42.      *    the single listview entries.
  43.      */
  44.  
  45. STATIC ULONG __saveds __asm
  46. ListViewRender(register __a0 struct Hook *Hook,register __a1 struct LVDrawMsg *Msg,register __a2 struct PhoneNode *Node)
  47. {
  48.         /* We only know how to redraw lines. */
  49.  
  50.     if(Msg -> lvdm_MethodID == LV_DRAW)
  51.     {
  52.         struct RastPort    *RPort    = Msg -> lvdm_RastPort;
  53.         LONG         Count    = Node -> Entry -> Count + 1,
  54.                  Left    = Msg -> lvdm_Bounds . MinX,
  55.                  Top    = Msg -> lvdm_Bounds . MinY,
  56.                  Width    = Msg -> lvdm_Bounds . MaxX - Msg -> lvdm_Bounds . MinX + 1,
  57.                  Height    = Msg -> lvdm_Bounds . MaxY - Msg -> lvdm_Bounds . MinY + 1,
  58.                  FgPen,BgPen,
  59.                  Template,
  60.                  Len,LabelLen;
  61.         UBYTE         String[80],Num[8];
  62.  
  63.             /* Determine the rendering pens. */
  64.  
  65.         switch(Msg -> lvdm_State)
  66.         {
  67.             case LVR_SELECTEDDISABLED:
  68.             case LVR_NORMALDISABLED:
  69.             case LVR_NORMAL:
  70.  
  71.                 FgPen = Msg -> lvdm_DrawInfo -> dri_Pens[TEXTPEN];
  72.                 BgPen = Msg -> lvdm_DrawInfo -> dri_Pens[BACKGROUNDPEN];
  73.                 break;
  74.  
  75.             case LVR_SELECTED:
  76.  
  77.                 FgPen = Msg -> lvdm_DrawInfo -> dri_Pens[FILLTEXTPEN];
  78.                 BgPen = Msg -> lvdm_DrawInfo -> dri_Pens[FILLPEN];
  79.                 break;
  80.         }
  81.  
  82.         if(Count > 0)
  83.         {
  84.             if(Msg -> lvdm_DrawInfo -> dri_Pens[HIGHLIGHTTEXTPEN] != BgPen)
  85.                 FgPen = Msg -> lvdm_DrawInfo -> dri_Pens[HIGHLIGHTTEXTPEN];
  86.         }
  87.  
  88.         SetAPen(RPort,BgPen);
  89.         RectFill(RPort,Left,Top,Left + 1,Top + Height - 1);
  90.  
  91.         Left    += 2;
  92.         Width    -= 2;
  93.  
  94.             /* Determine maximum index text length. */
  95.  
  96.         Template = 3 * ((ULONG)Hook -> h_Data) + TextLength(RPort," - ",3);
  97.  
  98.             /* Get the vanilla name. */
  99.  
  100.         strcpy(String,&Node -> VanillaNode . ln_Name[6]);
  101.  
  102.             /* Set the rendering pens. */
  103.  
  104.         SetDrMd(RPort,JAM2);
  105.         SetBPen(RPort,BgPen);
  106.  
  107.             /* Has this entry been selected? */
  108.  
  109.         if(Count > 0)
  110.         {
  111.             LONG Delta;
  112.  
  113.                 /* Set up the header. */
  114.  
  115.             SPrintf(Num,"%3ld - ",Count);
  116.  
  117.                 /* Determine header length. */
  118.  
  119.             Len = TextLength(RPort,Num,6);
  120.  
  121.                 /* Fill the space to precede the header. */
  122.  
  123.             if((Delta = Template - Len) > 0)
  124.             {
  125.                 SetAPen(RPort,BgPen);
  126.                 RectFill(RPort,Left,Top,Left + Delta - 1,Top + Height - 1);
  127.             }
  128.  
  129.                 /* Render the header, right-justified. */
  130.  
  131.             SetAPen(RPort,FgPen);
  132.  
  133.             Move(RPort,Left + Delta,Top + RPort -> Font -> tf_Baseline);
  134.             Text(RPort,Num,6);
  135.         }
  136.         else
  137.         {
  138.                 /* Fill the blank space to precede the vanilla name. */
  139.  
  140.             SetAPen(RPort,BgPen);
  141.             RectFill(RPort,Left,Top,Left + Template - 1,Top + Height - 1);
  142.             SetAPen(RPort,FgPen);
  143.         }
  144.  
  145.             /* Adjust width and area left edge. */
  146.  
  147.         Left    += Template;
  148.         Width    -= Template;
  149.  
  150.             /* Determine length of vanilla name. */
  151.  
  152.         LabelLen = strlen(String);
  153.  
  154.             /* Try to make it fit. */
  155.  
  156.         while(LabelLen > 0 && (Len = TextLength(RPort,String,LabelLen)) > Width)
  157.             LabelLen--;
  158.  
  159.             /* Print the vanilla name if possible. */
  160.  
  161.         if(LabelLen)
  162.         {
  163.             Move(RPort,Left,Top + RPort -> Font -> tf_Baseline);
  164.             Text(RPort,String,LabelLen);
  165.  
  166.             Left    += Len;
  167.             Width    -= Len;
  168.         }
  169.  
  170.             /* Fill the area to follow the vanilla name. */
  171.  
  172.         if(Width > 0)
  173.         {
  174.             SetAPen(RPort,BgPen);
  175.             RectFill(RPort,Left,Top,Left + Width - 1,Top + Height - 1);
  176.         }
  177.  
  178.             /* If the item happens to be disabled, draw the cross-hatch
  179.              * pattern across it.
  180.              */
  181.  
  182.         if(Msg -> lvdm_State == LVR_SELECTEDDISABLED || Msg -> lvdm_State == LVR_NORMALDISABLED)
  183.         {
  184.             SetDrMd(RPort,JAM1);
  185.  
  186.             SetAPen(RPort,Msg -> lvdm_DrawInfo -> dri_Pens[BLOCKPEN]);
  187.  
  188.             SetAfPt(RPort,(UWORD *)&Ghosting,1);
  189.  
  190.             RectFill(RPort,Msg -> lvdm_Bounds . MinX,Msg -> lvdm_Bounds . MinY,Msg -> lvdm_Bounds . MaxX,Msg -> lvdm_Bounds . MaxY);
  191.  
  192.             SetAfPt(RPort,NULL,0);
  193.         }
  194.  
  195.         return(LVCB_OK);
  196.     }
  197.     else
  198.         return(LVCB_UNKNOWN);
  199. }
  200.  
  201. STATIC ULONG __saveds __asm
  202. EditViewRender(register __a0 struct Hook *Hook,register __a1 struct LVDrawMsg *Msg,register __a2 struct Node *Node)
  203. {
  204.         /* We only know how to redraw lines. */
  205.  
  206.     if(Msg -> lvdm_MethodID == LV_DRAW)
  207.     {
  208.         struct RastPort    *RPort    = Msg -> lvdm_RastPort;
  209.         LONG         Left    = Msg -> lvdm_Bounds . MinX,
  210.                  Top    = Msg -> lvdm_Bounds . MinY,
  211.                  Width    = Msg -> lvdm_Bounds . MaxX - Msg -> lvdm_Bounds . MinX + 1,
  212.                  Height    = Msg -> lvdm_Bounds . MaxY - Msg -> lvdm_Bounds . MinY + 1,
  213.                  FgPen,BgPen,
  214.                  Template,
  215.                  Len,LabelLen;
  216.         STRPTR         String = Node -> ln_Name;
  217.  
  218.             /* Determine the rendering pens. */
  219.  
  220.         switch(Msg -> lvdm_State)
  221.         {
  222.             case LVR_SELECTEDDISABLED:
  223.             case LVR_NORMALDISABLED:
  224.             case LVR_NORMAL:
  225.  
  226.                 FgPen = Msg -> lvdm_DrawInfo -> dri_Pens[TEXTPEN];
  227.                 BgPen = Msg -> lvdm_DrawInfo -> dri_Pens[BACKGROUNDPEN];
  228.                 break;
  229.  
  230.             case LVR_SELECTED:
  231.  
  232.                 FgPen = Msg -> lvdm_DrawInfo -> dri_Pens[FILLTEXTPEN];
  233.                 BgPen = Msg -> lvdm_DrawInfo -> dri_Pens[FILLPEN];
  234.                 break;
  235.         }
  236.  
  237.         SetAPen(RPort,BgPen);
  238.         RectFill(RPort,Left,Top,Left + 1,Top + Height - 1);
  239.  
  240.         Left    += 2;
  241.         Width    -= 2;
  242.  
  243.             /* Determine maximum index text length. */
  244.  
  245.         Template = TextLength(RPort,"*",1);
  246.  
  247.             /* Set the rendering pens. */
  248.  
  249.         SetDrMd(RPort,JAM2);
  250.         SetBPen(RPort,BgPen);
  251.  
  252.             /* Has this entry been selected? */
  253.  
  254.         if(*String == '*')
  255.         {
  256.                 /* Render the header, right-justified. */
  257.  
  258.             SetAPen(RPort,FgPen);
  259.  
  260.             Move(RPort,Left,Top + RPort -> Font -> tf_Baseline);
  261.             Text(RPort,"*",1);
  262.         }
  263.         else
  264.         {
  265.                 /* Fill the blank space to precede the vanilla name. */
  266.  
  267.             SetAPen(RPort,BgPen);
  268.             RectFill(RPort,Left,Top,Left + Template - 1,Top + Height - 1);
  269.             SetAPen(RPort,FgPen);
  270.         }
  271.  
  272.             /* Adjust width and area left edge. */
  273.  
  274.         Left    += Template;
  275.         Width    -= Template;
  276.  
  277.         String++;
  278.  
  279.             /* Determine length of vanilla name. */
  280.  
  281.         LabelLen = strlen(String);
  282.  
  283.             /* Try to make it fit. */
  284.  
  285.         while(LabelLen > 0 && (Len = TextLength(RPort,String,LabelLen)) > Width)
  286.             LabelLen--;
  287.  
  288.             /* Print the vanilla name if possible. */
  289.  
  290.         if(LabelLen)
  291.         {
  292.             Move(RPort,Left,Top + RPort -> Font -> tf_Baseline);
  293.             Text(RPort,String,LabelLen);
  294.  
  295.             Left    += Len;
  296.             Width    -= Len;
  297.         }
  298.  
  299.             /* Fill the area to follow the vanilla name. */
  300.  
  301.         if(Width > 0)
  302.         {
  303.             SetAPen(RPort,BgPen);
  304.             RectFill(RPort,Left,Top,Left + Width - 1,Top + Height - 1);
  305.         }
  306.  
  307.             /* If the item happens to be disabled, draw the cross-hatch
  308.              * pattern across it.
  309.              */
  310.  
  311.         if(Msg -> lvdm_State == LVR_SELECTEDDISABLED || Msg -> lvdm_State == LVR_NORMALDISABLED)
  312.         {
  313.             SetDrMd(RPort,JAM1);
  314.  
  315.             SetAPen(RPort,Msg -> lvdm_DrawInfo -> dri_Pens[BLOCKPEN]);
  316.  
  317.             SetAfPt(RPort,(UWORD *)&Ghosting,1);
  318.  
  319.             RectFill(RPort,Msg -> lvdm_Bounds . MinX,Msg -> lvdm_Bounds . MinY,Msg -> lvdm_Bounds . MaxX,Msg -> lvdm_Bounds . MaxY);
  320.  
  321.             SetAfPt(RPort,NULL,0);
  322.         }
  323.  
  324.         return(LVCB_OK);
  325.     }
  326.     else
  327.         return(LVCB_UNKNOWN);
  328. }
  329.  
  330. STATIC VOID __regargs
  331. UpdateEditList(struct Configuration *Config)
  332. {
  333.     ULONG    *Array;
  334.     WORD     i;
  335.  
  336.     Array = (ULONG *)Config;
  337.  
  338.     for(i = 0 ; i < 10 ; i++)
  339.     {
  340.         if(Array[i])
  341.             EditLabels[i][0] = (UBYTE)'*';
  342.         else
  343.             EditLabels[i][0] = ' ';
  344.     }
  345.  
  346.     if(Config -> TransferConfig)
  347.         EditLabels[10][0] = (UBYTE)'*';
  348.     else
  349.         EditLabels[10][0] = ' ';
  350.  
  351.     EditLabels[15][0] = (UBYTE)'*';
  352.     EditLabels[16][0] = (UBYTE)'*';
  353.  
  354.     if(Config -> FileConfig)
  355.     {
  356.         EditLabels[11][0] = (UBYTE)'*';
  357.         EditLabels[12][0] = (UBYTE)'*';
  358.         EditLabels[13][0] = (UBYTE)'*';
  359.         EditLabels[14][0] = (UBYTE)'*';
  360.     }
  361.     else
  362.     {
  363.         EditLabels[11][0] = ' ';
  364.         EditLabels[12][0] = ' ';
  365.         EditLabels[13][0] = ' ';
  366.         EditLabels[14][0] = ' ';
  367.     }
  368. }
  369.  
  370. STATIC BYTE __regargs
  371. EditConfig(struct Configuration *Config,UWORD Type,struct Window *Window)
  372. {
  373.     STATIC LONG TypeMappings[15][2] =
  374.     {
  375.         EDIT_SERIAL,        PREF_SERIAL,
  376.         EDIT_MODEM,        PREF_MODEM,
  377.         EDIT_SCREEN,        PREF_SCREEN,
  378.         EDIT_TERMINAL,        PREF_TERMINAL,
  379.         EDIT_EMULATION,        PREF_EMULATION,
  380.         EDIT_CLIPBOARD,        PREF_CLIP,
  381.         EDIT_CAPTURE,        PREF_CAPTURE,
  382.         EDIT_COMMANDS,        PREF_COMMAND,
  383.         EDIT_MISC,        PREF_MISC,
  384.         EDIT_PATHS,        PREF_PATH,
  385.         EDIT_TRANSFER,        PREF_TRANSFER,
  386.         EDIT_TRANSLATION,    PREF_FILE,
  387.         EDIT_KEYMACROS,        PREF_FILE,
  388.         EDIT_CURSORKEYS,    PREF_FILE,
  389.         EDIT_FASTMACROS,    PREF_FILE
  390.     };
  391.  
  392.     struct FileRequester    *FileRequest;
  393.     UBYTE             DummyBuffer[MAX_FILENAME_LENGTH],
  394.                 *DummyChar;
  395.     BYTE             Changed    = FALSE,
  396.                  Default    = FALSE;
  397.     LONG             PrefType;
  398.     WORD             i;
  399.     APTR             Data;
  400.  
  401.     for(i = 0 ; i < 15 ; i++)
  402.     {
  403.         if(TypeMappings[i][0] == Type)
  404.         {
  405.             PrefType = TypeMappings[i][1];
  406.  
  407.             break;
  408.         }
  409.     }
  410.  
  411.     Data = GetConfigEntry(Config,PrefType);
  412.  
  413.     if(CreateConfigEntry(Config,PrefType))
  414.     {
  415.         if(!Data)
  416.             ResetConfigEntry(Config,PrefType,FALSE);
  417.  
  418.         switch(Type)
  419.         {
  420.             case EDIT_SERIAL:
  421.  
  422.                 Changed = SerialPanel(Config,&Default);
  423.                 break;
  424.  
  425.             case EDIT_MODEM:
  426.  
  427.                 Changed = ModemPanel(Config,&Default);
  428.                 break;
  429.  
  430.             case EDIT_SCREEN:
  431.  
  432.                 Changed = ScreenPanel(Config,&Default);
  433.                 break;
  434.  
  435.             case EDIT_TERMINAL:
  436.  
  437.                 Changed = TerminalPanel(Config,&Default);
  438.                 break;
  439.  
  440.             case EDIT_EMULATION:
  441.  
  442.                 Changed = EmulationPanel(Config,&Default);
  443.                 break;
  444.  
  445.             case EDIT_CLIPBOARD:
  446.  
  447.                 Changed = ClipPanel(Config,&Default);
  448.                 break;
  449.  
  450.             case EDIT_CAPTURE:
  451.  
  452.                 Changed = CapturePanel(Config,&Default);
  453.                 break;
  454.  
  455.             case EDIT_COMMANDS:
  456.  
  457.                 Changed = CommandPanel(Config,&Default);
  458.                 break;
  459.  
  460.             case EDIT_MISC:
  461.  
  462.                 Changed = MiscPanel(Config,&Default);
  463.                 break;
  464.  
  465.             case EDIT_PATHS:
  466.  
  467.                 Changed = PathPanel(Config,&Default);
  468.                 break;
  469.  
  470.             case EDIT_TRANSFER:
  471.  
  472.                 Changed = LibPanel(Config,&Default);
  473.                 break;
  474.  
  475.             case EDIT_TRANSLATION:
  476.  
  477.                 SplitFileName(Config -> FileConfig -> TranslationFileName,&DummyChar,DummyBuffer);
  478.  
  479.                 if(FileRequest = GetFile(Window,LocaleString(MSG_PHONEPANEL_SELECT_TRANSLATION_TXT),DummyBuffer,DummyChar,DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SELECT_TXT),TRUE))
  480.                 {
  481.                     strcpy(Config -> FileConfig -> TranslationFileName,DummyBuffer);
  482.  
  483.                     FreeAslRequest(FileRequest);
  484.  
  485.                     Changed = TRUE;
  486.                 }
  487.  
  488.                 break;
  489.  
  490.             case EDIT_KEYMACROS:
  491.  
  492.                 SplitFileName(Config -> FileConfig -> MacroFileName,&DummyChar,DummyBuffer);
  493.  
  494.                 if(FileRequest = GetFile(Window,LocaleString(MSG_PHONEPANEL_SELECT_KEYBOARD_MACROS_TXT),DummyBuffer,DummyChar,DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SELECT_TXT),TRUE))
  495.                 {
  496.                     strcpy(Config -> FileConfig -> MacroFileName,DummyBuffer);
  497.  
  498.                     FreeAslRequest(FileRequest);
  499.  
  500.                     Changed = TRUE;
  501.                 }
  502.  
  503.                 break;
  504.  
  505.             case EDIT_CURSORKEYS:
  506.  
  507.                 SplitFileName(Config -> FileConfig -> CursorFileName,&DummyChar,DummyBuffer);
  508.  
  509.                 if(FileRequest = GetFile(Window,LocaleString(MSG_PHONEPANEL_SELECT_CURSOR_KEYS_TXT),DummyBuffer,DummyChar,DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SELECT_TXT),TRUE))
  510.                 {
  511.                     strcpy(Config -> FileConfig -> CursorFileName,DummyBuffer);
  512.  
  513.                     FreeAslRequest(FileRequest);
  514.  
  515.                     Changed = TRUE;
  516.                 }
  517.  
  518.                 break;
  519.  
  520.             case EDIT_FASTMACROS:
  521.  
  522.                 SplitFileName(Config -> FileConfig -> FastMacroFileName,&DummyChar,DummyBuffer);
  523.  
  524.                 if(FileRequest = GetFile(Window,LocaleString(MSG_PHONEPANEL_SELECT_FAST_MACROS_TXT),DummyBuffer,DummyChar,DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SELECT_TXT),TRUE))
  525.                 {
  526.                     strcpy(Config -> FileConfig -> FastMacroFileName,DummyBuffer);
  527.  
  528.                     FreeAslRequest(FileRequest);
  529.  
  530.                     Changed = TRUE;
  531.                 }
  532.  
  533.                 break;
  534.         }
  535.  
  536.         if((!Changed && !Data) || Default)
  537.         {
  538.             DeleteConfigEntry(Config,PrefType);
  539.  
  540.             if(Default)
  541.                 Changed = TRUE;
  542.         }
  543.     }
  544.     else
  545.         DisplayBeep(Window -> WScreen);
  546.  
  547.     return(Changed);
  548. }
  549.  
  550. STATIC VOID __regargs
  551. SetPanelState(struct LayoutHandle *Handle,struct List *PhoneList,LONG Count,LONG Selected,BOOLEAN Released)
  552. {
  553.     if(NumPhoneEntries)
  554.     {
  555.         LT_SetAttributes(Handle,GAD_SAVELIST,
  556.             GA_Disabled,    FALSE,
  557.         TAG_DONE);
  558.  
  559.         LT_SetAttributes(Handle,GAD_PRINT,
  560.             GA_Disabled,    FALSE,
  561.         TAG_DONE);
  562.  
  563.         LT_SetAttributes(Handle,GAD_SORTLIST,
  564.             GA_Disabled,    NumPhoneEntries < 2,
  565.         TAG_DONE);
  566.  
  567.         LT_SetAttributes(Handle,GAD_PASSWORD,
  568.             GA_Disabled,    FALSE,
  569.         TAG_DONE);
  570.  
  571.         LT_SetAttributes(Handle,GAD_CLONEENTRY,
  572.             GA_Disabled,    Selected == -1,
  573.         TAG_DONE);
  574.  
  575.         LT_SetAttributes(Handle,GAD_REMOVEENTRY,
  576.             GA_Disabled,    Selected == -1,
  577.         TAG_DONE);
  578.  
  579.         LT_SetAttributes(Handle,GAD_COPYCONFIG,
  580.             GA_Disabled,    FALSE,
  581.         TAG_DONE);
  582.  
  583.         LT_SetAttributes(Handle,GAD_USEIT,
  584.             GA_Disabled,    Selected == -1,
  585.         TAG_DONE);
  586.  
  587.         if(Selected == -1)
  588.         {
  589.             LT_SetAttributes(Handle,GAD_EDIT,
  590.                 GA_Disabled,    TRUE,
  591.             TAG_DONE);
  592.  
  593.             if(Selected != LastSelected)
  594.             {
  595.                 LT_SetAttributes(Handle,GAD_NAMELIST,
  596.                     GA_Disabled,    FALSE,
  597.                     GTLV_Selected,    ~0,
  598.                 TAG_DONE);
  599.     
  600.                 LT_SetAttributes(Handle,GAD_NAME,
  601.                     GTST_String,    "",
  602.                     GA_Disabled,    TRUE,
  603.                 TAG_DONE);
  604.     
  605.                 LT_SetAttributes(Handle,GAD_COMMENT,
  606.                     GTST_String,    "",
  607.                     GA_Disabled,    TRUE,
  608.                 TAG_DONE);
  609.     
  610.                 LT_SetAttributes(Handle,GAD_PHONENUMBER,
  611.                     GTST_String,    "",
  612.                     GA_Disabled,    TRUE,
  613.                 TAG_DONE);
  614.     
  615.                 LT_SetAttributes(Handle,GAD_QUICKMENU,
  616.                     GTCB_Checked,    FALSE,
  617.                     GA_Disabled,    TRUE,
  618.                 TAG_DONE);
  619.             }
  620.  
  621.             LT_SetAttributes(Handle,GAD_TAG,
  622.                 GA_Disabled,    TRUE,
  623.             TAG_DONE);
  624.  
  625.             LT_SetAttributes(Handle,GAD_UNTAG,
  626.                 GA_Disabled,    TRUE,
  627.             TAG_DONE);
  628.  
  629.             LT_SetAttributes(Handle,GAD_DIALLIST,
  630.                 GA_Disabled,    Online || !Count,
  631.             TAG_DONE);
  632.         }
  633.         else
  634.         {
  635.             LT_SetAttributes(Handle,GAD_NAMELIST,
  636.                 GA_Disabled,    FALSE,
  637.                 GTLV_Labels,    PhoneList,
  638.             TAG_DONE);
  639.  
  640.             if(Selected != LastSelected)
  641.             {
  642.                 LT_SetAttributes(Handle,GAD_NAME,
  643.                     GTST_String,    Phonebook[Selected] -> Header -> Name,
  644.                     GA_Disabled,    FALSE,
  645.                 TAG_DONE);
  646.     
  647.                 LT_SetAttributes(Handle,GAD_COMMENT,
  648.                     GTST_String,    Phonebook[Selected] -> Header -> Comment,
  649.                     GA_Disabled,    FALSE,
  650.                 TAG_DONE);
  651.     
  652.                 LT_SetAttributes(Handle,GAD_PHONENUMBER,
  653.                     GTST_String,    Phonebook[Selected] -> Header -> Number,
  654.                     GA_Disabled,    FALSE,
  655.                 TAG_DONE);
  656.     
  657.                 LT_SetAttributes(Handle,GAD_QUICKMENU,
  658.                     GTCB_Checked,    Phonebook[Selected] -> Header -> QuickMenu,
  659.                     GA_Disabled,    FALSE,
  660.                 TAG_DONE);
  661.  
  662.                 if(Released)
  663.                 {
  664.                     LT_SetAttributes(Handle,GAD_EDIT,
  665.                         GTLV_Labels,    ~0,
  666.                     TAG_DONE);
  667.  
  668.                     UpdateEditList(Phonebook[Selected] -> Config);
  669.  
  670.                     LT_SetAttributes(Handle,GAD_EDIT,
  671.                         GTLV_Labels,    EditList,
  672.                         GA_Disabled,    FALSE,
  673.                     TAG_DONE);
  674.                 }
  675.             }
  676.             else
  677.             {
  678.                 LT_SetAttributes(Handle,GAD_EDIT,
  679.                     GA_Disabled,    FALSE,
  680.                 TAG_DONE);
  681.             }
  682.  
  683.             LT_SetAttributes(Handle,GAD_TAG,
  684.                 GA_Disabled,    Phonebook[Selected] -> Count != -1,
  685.             TAG_DONE);
  686.  
  687.             LT_SetAttributes(Handle,GAD_UNTAG,
  688.                 GA_Disabled,    Phonebook[Selected] -> Count == -1,
  689.             TAG_DONE);
  690.  
  691.             LT_SetAttributes(Handle,GAD_DIALLIST,
  692.                 GA_Disabled,    Online || !Phonebook[Selected] -> Header -> Number[0],
  693.             TAG_DONE);
  694.         }
  695.  
  696.         LT_SetAttributes(Handle,GAD_TAG_ALL,
  697.             GA_Disabled,    Count == NumPhoneEntries,
  698.         TAG_DONE);
  699.  
  700.         LT_SetAttributes(Handle,GAD_TOGGLE_ALL,
  701.             GA_Disabled,    FALSE,
  702.         TAG_DONE);
  703.  
  704.         LT_SetAttributes(Handle,GAD_CLEARLIST,
  705.             GA_Disabled,    !Count,
  706.         TAG_DONE);
  707.     }
  708.     else
  709.     {
  710.         LONG i;
  711.  
  712.         for(i = GAD_NAMELIST ; i < GAD_CANCEL ; i++)
  713.         {
  714.             LT_SetAttributes(Handle,i,
  715.                 GA_Disabled,    i != GAD_LOADLIST && i != GAD_NEWENTRY,
  716.             TAG_DONE);
  717.         }
  718.     }
  719.  
  720.     LastSelected = Selected;
  721. }
  722.  
  723. BYTE
  724. PhonePanel()
  725. {
  726.     struct LayoutHandle    *Handle;
  727.     struct PhoneNode    *TempNode;
  728.     struct List        *PhoneList;
  729.     LONG             Count;
  730.     BYTE             DialTheList = FALSE;
  731.  
  732.     LastSelected = LastNumPhoneEntries = -17;
  733.  
  734.     if(Phonebook && NumPhoneEntries)
  735.     {
  736.         LONG i;
  737.  
  738.         if(!(PhoneList = CreatePhoneList()))
  739.         {
  740.             DisplayBeep(Window -> WScreen);
  741.  
  742.             return(FALSE);
  743.         }
  744.  
  745.         FreeDialList(TRUE);
  746.  
  747.         for(i = 0, Count = -1 ; i < NumPhoneEntries ; i++)
  748.         {
  749.             if(Phonebook[i] -> Count > Count)
  750.                 Count = Phonebook[i] -> Count;
  751.         }
  752.  
  753.         Count++;
  754.     }
  755.     else
  756.     {
  757.         PhoneList    = NULL;
  758.         Count        = 0;
  759.     }
  760.  
  761.     if(Handle = LT_CreateHandleTags(Window -> WScreen,
  762.         LH_LocaleHook,        &LocaleHook,
  763. /*        LH_AutoActivate,    TRUE,*/
  764.     TAG_DONE))
  765.     {
  766.         STATIC struct Hook ListViewHook =
  767.         {
  768.             {NULL},
  769.             (HOOKFUNC)ListViewRender
  770.         };
  771.  
  772.         STATIC struct Hook EditViewHook =
  773.         {
  774.             {NULL},
  775.             (HOOKFUNC)EditViewRender
  776.         };
  777.  
  778.         STATIC LONG LabelIDTable[] =
  779.         {
  780.             MSG_PHONEPANEL_LOAD_LIST_GAD,
  781.             MSG_PHONEPANEL_SAVE_LIST_GAD,
  782.             MSG_PHONEPANEL_PRINT_GAD,
  783.             MSG_PHONEPANEL_SORT_LIST_GAD,
  784.             MSG_PHONEPANEL_SET_PASSWORT_GAD,
  785.             MSG_PHONEPANEL_NEW_ENTRY_GAD,
  786.             MSG_PHONEPANEL_CLONE_ENTRY_GAD,
  787.             MSG_PHONEPANEL_REMOVE_ENTRY_GAD,
  788.             MSG_PHONEPANEL_COPY_CONFIG_GAD,
  789.             MSG_PHONEPANEL_USE_ENTRY_GAD,
  790.             MSG_PHONEPANEL_TAG_GAD,
  791.             MSG_PHONEPANEL_UNTAG_GAD,
  792.             MSG_PHONEPANEL_TAG_ALL_GAD,
  793.             MSG_PHONEPANEL_TOGGLE_ALL_GAD,
  794.             MSG_PHONEPANEL_UNTAG_ALL_GAD
  795.         };
  796.  
  797.         struct IBox     Bounds;
  798.         struct Window    *PhoneWindow;
  799.         LONG         i,Max,Size,MaxPen,MaxChars;
  800.         UBYTE         SmallString[2];
  801.  
  802.         for(i = MaxChars = 0 ; i < NumElements(LabelIDTable) ; i++)
  803.         {
  804.             if((Max = LT_LabelChars(Handle,LocaleString(LabelIDTable[i]))) > MaxChars)
  805.                 MaxChars = Max;
  806.         }
  807.  
  808.         MaxPen = MAX(Handle -> DrawInfo -> dri_Pens[BLOCKPEN],MAX(Handle -> DrawInfo -> dri_Pens[TEXTPEN],MAX(Handle -> DrawInfo -> dri_Pens[BACKGROUNDPEN],MAX(Handle -> DrawInfo -> dri_Pens[FILLTEXTPEN],MAX(Handle -> DrawInfo -> dri_Pens[FILLPEN],Handle -> DrawInfo -> dri_Pens[HIGHLIGHTTEXTPEN])))));
  809.  
  810.         SmallString[1] = 0;
  811.         Max = 0;
  812.  
  813.         for(i = MSG_PHONEPANEL_SERIAL_TXT ; i <= MSG_PHONEPANEL_RATES_TXT ; i++)
  814.             EditLabels[i - MSG_PHONEPANEL_SERIAL_TXT][0] = ' ';
  815.  
  816.         for(i = '0' ; i <= '9' ; i++)
  817.         {
  818.             SmallString[0] = i;
  819.  
  820.             if((Size = LT_LabelWidth(Handle,SmallString)) > Max)
  821.                 Max = Size;
  822.         }
  823.  
  824.         ListViewHook . h_Data = (APTR)Max;
  825.  
  826.         LT_New(Handle,
  827.             LA_Type,    VERTICAL_KIND,
  828.         TAG_DONE);
  829.         {
  830.             LT_New(Handle,
  831.                 LA_Type,    VERTICAL_KIND,
  832. /*                LA_LabelID,    MSG_V36_0132,*/
  833.             TAG_DONE);
  834.             {
  835.                 LT_New(Handle,
  836.                     LA_Type,    HORIZONTAL_KIND,
  837.                 TAG_DONE);
  838.                 {
  839.                     LT_New(Handle,
  840.                         LA_Type,    LISTVIEW_KIND,
  841.                         LA_LabelID,    MSG_GLOBAL_NAME_LIST_GAD,
  842.                         LA_ID,        GAD_NAMELIST,
  843.                         LA_Chars,    40,
  844.                         LA_Lines,    4,
  845.                         GTLV_CallBack,    &ListViewHook,
  846.                         GTLV_MaxPen,    MaxPen,
  847.                         LALV_CursorKey,    TRUE,
  848.                         LALV_MaxGrowX,    50,
  849.                         LALV_MaxGrowY,    20,
  850.  
  851.                         Kick30 ? LALV_Link : TAG_IGNORE, NIL_LINK,
  852.  
  853.                         PhoneList ? GTLV_Labels : TAG_IGNORE, PhoneList,
  854.                     TAG_DONE);
  855.  
  856.                     LT_New(Handle,
  857.                         LA_Type,    LISTVIEW_KIND,
  858.                         LA_LabelID,    MSG_PHONEPANEL_SETTINGS_TXT,
  859.                         LA_Lines,    4,
  860.                         LA_ID,        GAD_EDIT,
  861.                         LA_NoKey,    TRUE,
  862.                         GA_Disabled,    TRUE,
  863.                         GTLV_Labels,    EditList,
  864.                         GTLV_CallBack,    &EditViewHook,
  865.                     TAG_DONE);
  866.  
  867.                     LT_EndGroup(Handle);
  868.                 }
  869.  
  870.                 LT_New(Handle,
  871.                     LA_Type,    HORIZONTAL_KIND,
  872.                 TAG_DONE);
  873.                 {
  874.                     LT_New(Handle,
  875.                         LA_Type,    VERTICAL_KIND,
  876.                     TAG_DONE);
  877.                     {
  878.                         LT_New(Handle,
  879.                             LA_Type,        STRING_KIND,
  880.                             LA_LabelID,        MSG_PHONEPANEL_BBS_NAME_GAD,
  881.                             LA_ID,            GAD_NAME,
  882.                             GTST_MaxChars,        39,
  883.                             LA_Chars,        40,
  884.                             GA_Disabled,        TRUE,
  885.                         TAG_DONE);
  886.     
  887.                         LT_New(Handle,
  888.                             LA_Type,        STRING_KIND,
  889.                             LA_LabelID,        MSG_PHONEPANEL_COMMENT_GAD,
  890.                             LA_ID,            GAD_COMMENT,
  891.                             GTST_MaxChars,        99,
  892.                             GA_Disabled,        TRUE,
  893.                         TAG_DONE);
  894.     
  895.                         LT_New(Handle,
  896.                             LA_Type,        STRING_KIND,
  897.                             LA_LabelID,        MSG_PHONEPANEL_PHONE_NUMBER_GAD,
  898.                             LA_ID,            GAD_PHONENUMBER,
  899.                             GTST_MaxChars,        99,
  900.                             LAST_LastGadget,    TRUE,
  901.                             GA_Disabled,        TRUE,
  902.                         TAG_DONE);
  903.     
  904.                         LT_EndGroup(Handle);
  905.                     }
  906.     
  907.                     LT_New(Handle,
  908.                         LA_Type,    VERTICAL_KIND,
  909.                     TAG_DONE);
  910.                     {
  911.                         LT_New(Handle,
  912.                             LA_Type,    CHECKBOX_KIND,
  913.                             LA_LabelID,    MSG_PHONEPANEL_QUICK_MENU_GAD,
  914.                             LA_ID,        GAD_QUICKMENU,
  915.                             GA_Disabled,    TRUE,
  916.                         TAG_DONE);
  917.     
  918.                         LT_EndGroup(Handle);
  919.                     }
  920.  
  921.                     LT_EndGroup(Handle);
  922.                 }
  923.  
  924.                 LT_EndGroup(Handle);
  925.             }
  926.  
  927.             LT_New(Handle,
  928.                 LA_Type,VERTICAL_KIND,
  929.             TAG_DONE);
  930.             {
  931.                 LT_New(Handle,
  932.                     LA_Type,    XBAR_KIND,
  933.                     LAXB_FullSize,    TRUE,
  934.                 TAG_DONE);
  935.  
  936.                 LT_EndGroup(Handle);
  937.             }
  938.  
  939.             LT_New(Handle,
  940.                 LA_Type,    VERTICAL_KIND,
  941.             TAG_DONE);
  942.             {
  943.                 LT_New(Handle,
  944.                     LA_Type,    HORIZONTAL_KIND,
  945.                     LAGR_SameSize,    TRUE,
  946.                     LAGR_Spread,    TRUE,
  947.                 TAG_DONE);
  948.                 {
  949.                     LT_New(Handle,
  950.                         LA_Type,    BUTTON_KIND,
  951.                         LA_LabelID,    MSG_PHONEPANEL_NEW_ENTRY_GAD,
  952.                         LA_ID,        GAD_NEWENTRY,
  953.                         LA_Chars,    MaxChars,
  954.                     TAG_DONE);
  955.  
  956.                     LT_New(Handle,
  957.                         LA_Type,    BUTTON_KIND,
  958.                         LA_LabelID,    MSG_PHONEPANEL_CLONE_ENTRY_GAD,
  959.                         LA_ID,        GAD_CLONEENTRY,
  960.                         GA_Disabled,    TRUE,
  961.                     TAG_DONE);
  962.  
  963.                     LT_New(Handle,
  964.                         LA_Type,    BUTTON_KIND,
  965.                         LA_LabelID,    MSG_PHONEPANEL_REMOVE_ENTRY_GAD,
  966.                         LA_ID,        GAD_REMOVEENTRY,
  967.                         GA_Disabled,    TRUE,
  968.                     TAG_DONE);
  969.  
  970.                     LT_New(Handle,
  971.                         LA_Type,    BUTTON_KIND,
  972.                         LA_LabelID,    MSG_PHONEPANEL_COPY_CONFIG_GAD,
  973.                         LA_ID,        GAD_COPYCONFIG,
  974.                         GA_Disabled,    !NumPhoneEntries,
  975.                     TAG_DONE);
  976.  
  977.                     LT_New(Handle,
  978.                         LA_Type,    BUTTON_KIND,
  979.                         LA_LabelID,    MSG_PHONEPANEL_USE_ENTRY_GAD,
  980.                         LA_ID,        GAD_USEIT,
  981.                         GA_Disabled,    TRUE,
  982.                     TAG_DONE);
  983.  
  984.                     LT_EndGroup(Handle);
  985.                 }
  986.  
  987.                 LT_New(Handle,
  988.                     LA_Type,    HORIZONTAL_KIND,
  989.                     LAGR_SameSize,    TRUE,
  990.                     LAGR_Spread,    TRUE,
  991.                 TAG_DONE);
  992.                 {
  993.                     LT_New(Handle,
  994.                         LA_Type,    BUTTON_KIND,
  995.                         LA_LabelID,    MSG_PHONEPANEL_TAG_GAD,
  996.                         LA_Chars,    MaxChars,
  997.                         LA_ID,        GAD_TAG,
  998.                         GA_Disabled,    TRUE,
  999.                     TAG_DONE);
  1000.  
  1001.                     LT_New(Handle,
  1002.                         LA_Type,    BUTTON_KIND,
  1003.                         LA_LabelID,    MSG_PHONEPANEL_UNTAG_GAD,
  1004.                         LA_ID,        GAD_UNTAG,
  1005.                         GA_Disabled,    !Count,
  1006.                     TAG_DONE);
  1007.  
  1008.                     LT_New(Handle,
  1009.                         LA_Type,    BUTTON_KIND,
  1010.                         LA_LabelID,    MSG_PHONEPANEL_TAG_ALL_GAD,
  1011.                         LA_ID,        GAD_TAG_ALL,
  1012.                         GA_Disabled,    !NumPhoneEntries,
  1013.                     TAG_DONE);
  1014.  
  1015.                     LT_New(Handle,
  1016.                         LA_Type,    BUTTON_KIND,
  1017.                         LA_LabelID,    MSG_PHONEPANEL_TOGGLE_ALL_GAD,
  1018.                         LA_ID,        GAD_TOGGLE_ALL,
  1019.                         GA_Disabled,    !NumPhoneEntries,
  1020.                     TAG_DONE);
  1021.  
  1022.                     LT_New(Handle,
  1023.                         LA_Type,    BUTTON_KIND,
  1024.                         LA_LabelID,    MSG_PHONEPANEL_UNTAG_ALL_GAD,
  1025.                         LA_ID,        GAD_CLEARLIST,
  1026.                         GA_Disabled,    !Count,
  1027.                     TAG_DONE);
  1028.  
  1029.                     LT_EndGroup(Handle);
  1030.                 }
  1031.  
  1032.                 LT_New(Handle,
  1033.                     LA_Type,VERTICAL_KIND,
  1034.                 TAG_DONE);
  1035.                 {
  1036.                     LT_New(Handle,
  1037.                         LA_Type,    XBAR_KIND,
  1038.                     TAG_DONE);
  1039.  
  1040.                     LT_EndGroup(Handle);
  1041.                 }
  1042.  
  1043.                 LT_New(Handle,
  1044.                     LA_Type,    HORIZONTAL_KIND,
  1045.                     LAGR_SameSize,    TRUE,
  1046.                     LAGR_Spread,    TRUE,
  1047.                 TAG_DONE);
  1048.                 {
  1049.                     LT_New(Handle,
  1050.                         LA_Type,    BUTTON_KIND,
  1051.                         LA_LabelID,    MSG_PHONEPANEL_LOAD_LIST_GAD,
  1052.                         LA_ID,        GAD_LOADLIST,
  1053.                         LA_Chars,    MaxChars,
  1054.                     TAG_DONE);
  1055.  
  1056.                     LT_New(Handle,
  1057.                         LA_Type,    BUTTON_KIND,
  1058.                         LA_LabelID,    MSG_PHONEPANEL_SAVE_LIST_GAD,
  1059.                         LA_ID,        GAD_SAVELIST,
  1060.                         GA_Disabled,    !NumPhoneEntries,
  1061.                     TAG_DONE);
  1062.  
  1063.                     LT_New(Handle,
  1064.                         LA_Type,    BUTTON_KIND,
  1065.                         LA_LabelID,    MSG_PHONEPANEL_PRINT_GAD,
  1066.                         LA_ID,        GAD_PRINT,
  1067.                         GA_Disabled,    !NumPhoneEntries,
  1068.                     TAG_DONE);
  1069.  
  1070.                     LT_New(Handle,
  1071.                         LA_Type,    BUTTON_KIND,
  1072.                         LA_LabelID,    MSG_PHONEPANEL_SORT_LIST_GAD,
  1073.                         LA_ID,        GAD_SORTLIST,
  1074.                         GA_Disabled,    NumPhoneEntries < 2,
  1075.                     TAG_DONE);
  1076.  
  1077.                     LT_New(Handle,
  1078.                         LA_Type,    BUTTON_KIND,
  1079.                         LA_LabelID,    MSG_PHONEPANEL_SET_PASSWORT_GAD,
  1080.                         LA_ID,        GAD_PASSWORD,
  1081.                         GA_Disabled,    !NumPhoneEntries,
  1082.                     TAG_DONE);
  1083.  
  1084.                     LT_EndGroup(Handle);
  1085.                 }
  1086.  
  1087.                 LT_New(Handle,
  1088.                     LA_Type,VERTICAL_KIND,
  1089.                 TAG_DONE);
  1090.                 {
  1091.                     LT_New(Handle,
  1092.                         LA_Type,    XBAR_KIND,
  1093.                         LAXB_FullSize,    TRUE,
  1094.                     TAG_DONE);
  1095.  
  1096.                     LT_EndGroup(Handle);
  1097.                 }
  1098.  
  1099.                 LT_New(Handle,
  1100.                     LA_Type,    HORIZONTAL_KIND,
  1101.                     LAGR_SameSize,    TRUE,
  1102.                     LAGR_Spread,    TRUE,
  1103.                 TAG_DONE);
  1104.                 {
  1105.                     LT_New(Handle,
  1106.                         LA_Type,    BUTTON_KIND,
  1107.                         LA_LabelID,    MSG_PHONEPANEL_DIAL_LIST_GAD,
  1108.                         LA_ID,        GAD_DIALLIST,
  1109.                         LABT_ReturnKey,    TRUE,
  1110.                         LABT_ExtraFat,    TRUE,
  1111.                         GA_Disabled,    !Count || Online,
  1112.                     TAG_DONE);
  1113.  
  1114.                     LT_New(Handle,
  1115.                         LA_Type,    BUTTON_KIND,
  1116.                         LA_LabelID,    MSG_GLOBAL_CANCEL_GAD,
  1117.                         LA_ID,        GAD_CANCEL,
  1118.                         LABT_EscKey,    TRUE,
  1119.                     TAG_DONE);
  1120.  
  1121.                     LT_EndGroup(Handle);
  1122.                 }
  1123.  
  1124.                 LT_EndGroup(Handle);
  1125.             }
  1126.  
  1127.             LT_EndGroup(Handle);
  1128.         }
  1129.  
  1130.         if(Screen)
  1131.         {
  1132.             Bounds . Left    = Window -> LeftEdge;
  1133.             Bounds . Top    = Window -> TopEdge;
  1134.             Bounds . Width    = Window -> Width;
  1135.             Bounds . Height    = Window -> Height;
  1136.         }
  1137.  
  1138.         if(PhoneWindow = LT_Layout(Handle,LocaleString(MSG_PHONEPANEL_PHONEBOOK_TXT),Screen ? &Bounds : NULL,0,0,IDCMP_CLOSEWINDOW,0,
  1139.             LAWN_HelpHook,        &GuideHook,
  1140.             WA_DepthGadget,        TRUE,
  1141.             WA_CloseGadget,        TRUE,
  1142.             WA_DragBar,        TRUE,
  1143.             WA_RMBTrap,        TRUE,
  1144.             WA_Activate,        TRUE,
  1145.         TAG_DONE))
  1146.         {
  1147.             struct IntuiMessage    *Message;
  1148.             BOOLEAN             Done = FALSE,
  1149.                          Released;
  1150.             ULONG             MsgClass,
  1151.                          MsgQualifier;
  1152.             UWORD             MsgCode;
  1153.             struct Gadget        *MsgGadget;
  1154.  
  1155.             BYTE             ClickAction;
  1156.  
  1157.             UBYTE             DummyBuffer[MAX_FILENAME_LENGTH],
  1158.                         *DummyChar;
  1159.  
  1160.             LONG             Selected = ~0,i;
  1161.  
  1162.             struct FileRequester    *FileRequest;
  1163.  
  1164.             GuideContext(CONTEXT_PHONEBOOK);
  1165.  
  1166.             PushWindow(PhoneWindow);
  1167.  
  1168.             SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1169.  
  1170.             do
  1171.             {
  1172.                 if(Wait(PORTMASK(PhoneWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  1173.                 {
  1174.                     FreeDialList(TRUE);
  1175.  
  1176.                     break;
  1177.                 }
  1178.  
  1179.                 while(Message = (struct IntuiMessage *)GT_GetIMsg(PhoneWindow -> UserPort))
  1180.                 {
  1181.                     MsgClass    = Message -> Class;
  1182.                     MsgQualifier    = Message -> Qualifier;
  1183.                     MsgCode        = Message -> Code;
  1184.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  1185.  
  1186. /*                    if(MsgQualifier & IEQUALIFIER_REPEAT)*/
  1187. /*                        Released = FALSE;*/
  1188. /*                    else*/
  1189.                         Released = TRUE;
  1190.  
  1191.                     GT_ReplyIMsg(Message);
  1192.  
  1193.                     if(MsgClass == IDCMP_RAWKEY)
  1194.                     {
  1195.                         LT_HandleInput(Handle,MsgQualifier,&MsgClass,&MsgCode,&MsgGadget);
  1196.  
  1197.                         if(MsgClass == IDCMP_GADGETUP && MsgGadget -> GadgetID == GAD_NAMELIST)
  1198.                             MsgQualifier &= ~(IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT);
  1199.                     }
  1200.                     else
  1201.                         LT_HandleInput(Handle,MsgQualifier,&MsgClass,&MsgCode,&MsgGadget);
  1202.  
  1203.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  1204.                     {
  1205.                         FreeDialList(TRUE);
  1206.  
  1207.                         Done = TRUE;
  1208.                     }
  1209.  
  1210.                     if(LT_GetCode(MsgQualifier,MsgClass,MsgCode,MsgGadget) == ' ' && Selected != -1)
  1211.                     {
  1212.                         LT_SetAttributes(Handle,GAD_NAMELIST,
  1213.                             GTLV_Labels,    ~0,
  1214.                         TAG_DONE);
  1215.  
  1216.                         if(Phonebook[Selected] -> Count == -1)
  1217.                         {
  1218.                             Phonebook[Selected] -> Count = Count++;
  1219.  
  1220.                             SPrintf(Phonebook[Selected] -> Node -> LocalName,"%3ld - %s",Count,Phonebook[Selected] -> Header -> Name);
  1221.  
  1222.                             LT_PressButton(Handle,GAD_TAG);
  1223.                         }
  1224.                         else
  1225.                         {
  1226.                             RemoveDialEntry(Selected);
  1227.  
  1228.                             Count--;
  1229.  
  1230.                             LT_PressButton(Handle,GAD_UNTAG);
  1231.                         }
  1232.  
  1233.                         SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1234.                     }
  1235.  
  1236.                     if(MsgClass == IDCMP_GADGETUP)
  1237.                     {
  1238.                         switch(MsgGadget -> GadgetID)
  1239.                         {
  1240.                             case GAD_TOGGLE_ALL:
  1241.                             {
  1242.                                 LONG LocalCount = 0;
  1243.  
  1244.                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1245.                                     GTLV_Labels,    ~0,
  1246.                                 TAG_DONE);
  1247.  
  1248.                                 for(i = 0 ; i < NumPhoneEntries ; i++)
  1249.                                 {
  1250.                                     if(Phonebook[i] -> Count == -1)
  1251.                                     {
  1252.                                         Phonebook[i] -> Count = LocalCount++;
  1253.  
  1254.                                         SPrintf(Phonebook[i] -> Node -> LocalName,"%3ld - %s",LocalCount,Phonebook[i] -> Header -> Name);
  1255.                                     }
  1256.                                     else
  1257.                                         RemoveDialEntry(i);
  1258.                                 }
  1259.  
  1260.                                 Count = LocalCount;
  1261.  
  1262.                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1263.                                     GTLV_Labels,    PhoneList,
  1264.                                 TAG_DONE);
  1265.  
  1266.                                 SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1267.  
  1268.                                 break;
  1269.                             }
  1270.  
  1271.                             case GAD_TAG_ALL:
  1272.  
  1273.                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1274.                                     GTLV_Labels,    ~0,
  1275.                                 TAG_DONE);
  1276.  
  1277.                                 for(i = 0 ; i < NumPhoneEntries ; i++)
  1278.                                 {
  1279.                                     if(Phonebook[i] -> Count == -1)
  1280.                                     {
  1281.                                         Phonebook[i] -> Count = Count++;
  1282.  
  1283.                                         SPrintf(Phonebook[i] -> Node -> LocalName,"%3ld - %s",Count,Phonebook[i] -> Header -> Name);
  1284.                                     }
  1285.                                 }
  1286.  
  1287.                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1288.                                     GTLV_Labels,    PhoneList,
  1289.                                 TAG_DONE);
  1290.  
  1291.                                 SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1292.  
  1293.                                 break;
  1294.  
  1295.                             case GAD_TAG:
  1296.  
  1297.                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1298.                                     GTLV_Labels,    ~0,
  1299.                                 TAG_DONE);
  1300.  
  1301.                                 Phonebook[Selected] -> Count = Count++;
  1302.  
  1303.                                 SPrintf(Phonebook[Selected] -> Node -> LocalName,"%3ld - %s",Count,Phonebook[Selected] -> Header -> Name);
  1304.  
  1305.                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1306.                                     GTLV_Labels,    PhoneList,
  1307.                                 TAG_DONE);
  1308.  
  1309.                                 SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1310.  
  1311.                                 break;
  1312.  
  1313.                             case GAD_UNTAG:
  1314.  
  1315.                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1316.                                     GTLV_Labels,    ~0,
  1317.                                 TAG_DONE);
  1318.  
  1319.                                 RemoveDialEntry(Selected);
  1320.  
  1321.                                 Count--;
  1322.  
  1323.                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1324.                                     GTLV_Labels,    PhoneList,
  1325.                                 TAG_DONE);
  1326.  
  1327.                                 SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1328.  
  1329.                                 break;
  1330.  
  1331.                             case GAD_NAMELIST:
  1332.  
  1333.                                 Selected = MsgCode;
  1334.  
  1335.                                 if(Phonebook[Selected] -> Header -> Number[0] && Phonebook[Selected] -> Header -> Name[0])
  1336.                                 {
  1337.                                     if(MsgQualifier & (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT))
  1338.                                         ClickAction = CLICK_TOGGLE;
  1339.                                     else
  1340.                                         ClickAction = CLICK_SELECT;
  1341.                                 }
  1342.                                 else
  1343.                                     ClickAction = CLICK_SELECT;
  1344.  
  1345.                                 if(ClickAction == CLICK_TOGGLE)
  1346.                                 {
  1347.                                     LT_SetAttributes(Handle,GAD_NAMELIST,
  1348.                                         GTLV_Labels,    ~0,
  1349.                                     TAG_DONE);
  1350.  
  1351.                                     if(Phonebook[Selected] -> Count == -1)
  1352.                                     {
  1353.                                         Phonebook[Selected] -> Count = Count++;
  1354.  
  1355.                                         SPrintf(Phonebook[Selected] -> Node -> LocalName,"%3ld - %s",Count,Phonebook[Selected] -> Header -> Name);
  1356.                                     }
  1357.                                     else
  1358.                                     {
  1359.                                         RemoveDialEntry(Selected);
  1360.  
  1361.                                         Count--;
  1362.                                     }
  1363.  
  1364.                                     LT_SetAttributes(Handle,GAD_NAMELIST,
  1365.                                         GTLV_Labels,    PhoneList,
  1366.                                     TAG_DONE);
  1367.                                 }
  1368.  
  1369.                                 SetPanelState(Handle,PhoneList,Count,Selected,Released);
  1370.  
  1371.                                 break;
  1372.  
  1373.                             case GAD_CLEARLIST:
  1374.  
  1375.                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1376.                                     GTLV_Labels,    ~0,
  1377.                                 TAG_DONE);
  1378.  
  1379.                                 Count = 0;
  1380.  
  1381.                                 for(i = 0 ; i < NumPhoneEntries ; i++)
  1382.                                 {
  1383.                                     SPrintf(Phonebook[i] -> Node -> LocalName,"      %s",Phonebook[i] -> Header -> Name);
  1384.  
  1385.                                     Phonebook[i] -> Count = -1;
  1386.                                 }
  1387.  
  1388.                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1389.                                     GTLV_Labels,    PhoneList,
  1390.                                 TAG_DONE);
  1391.  
  1392.                                 SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1393.  
  1394.                                 break;
  1395.  
  1396.                             case GAD_PRINT:
  1397.  
  1398.                                 LT_LockWindow(PhoneWindow);
  1399.  
  1400.                                 PrintPanel(PhoneWindow,PhoneList,Count);
  1401.  
  1402.                                 LT_UnlockWindow(PhoneWindow);
  1403.  
  1404.                                 LT_ShowWindow(Handle,TRUE);
  1405.  
  1406.                                 break;
  1407.  
  1408.                             case GAD_USEIT:
  1409.  
  1410.                                 if(Selected != ~0)
  1411.                                 {
  1412.                                     SaveConfig(Config,PrivateConfig);
  1413.  
  1414.                                     SaveConfig(Phonebook[Selected] -> Config,Config);
  1415.  
  1416.                                     strcpy(Password,Phonebook[Selected] -> Header -> Password);
  1417.                                     strcpy(UserName,Phonebook[Selected] -> Header -> UserName);
  1418.  
  1419.                                     ConfigSetup();
  1420.  
  1421.                                     Done = TRUE;
  1422.  
  1423.                                     ConfigChanged = FALSE;
  1424.                                 }
  1425.  
  1426.                                 break;
  1427.  
  1428.                             case GAD_NEWENTRY:
  1429.  
  1430.                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1431.                                     GTLV_Labels,    ~0,
  1432.                                 TAG_DONE);
  1433.  
  1434.                                 if(PhoneList)
  1435.                                 {
  1436.                                     DeletePhoneList(PhoneList);
  1437.  
  1438.                                     PhoneList = NULL;
  1439.                                 }
  1440.  
  1441.                                 if(NewPhoneEntry())
  1442.                                 {
  1443.                                     if(PhoneList = CreatePhoneList())
  1444.                                     {
  1445.                                         Selected = NumPhoneEntries - 1;
  1446.  
  1447.                                         LT_SetAttributes(Handle,GAD_NAMELIST,
  1448.                                             GTLV_Labels,        PhoneList,
  1449.                                             GTLV_Selected,        Selected,
  1450.                                             GTLV_Top,        Selected,
  1451.                                             GTLV_MakeVisible,    Selected,
  1452.                                         TAG_DONE);
  1453.  
  1454.                                         SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1455.  
  1456.                                         LT_Activate(Handle,GAD_NAME);
  1457.  
  1458.                                         RebuildMenu = PhonebookChanged = TRUE;
  1459.                                     }
  1460.                                     else
  1461.                                         goto ClearList;
  1462.                                 }
  1463.                                 else
  1464.                                     goto ClearList;
  1465.  
  1466.                                 break;
  1467.  
  1468.                             case GAD_CLONEENTRY:
  1469.  
  1470.                                 if(Selected != ~0)
  1471.                                 {
  1472.                                     LT_SetAttributes(Handle,GAD_NAMELIST,
  1473.                                         GTLV_Labels,    ~0,
  1474.                                     TAG_DONE);
  1475.  
  1476.                                     if(PhoneList)
  1477.                                     {
  1478.                                         DeletePhoneList(PhoneList);
  1479.  
  1480.                                         PhoneList = NULL;
  1481.                                     }
  1482.  
  1483.                                     if(NewPhoneEntry())
  1484.                                     {
  1485.                                         if(PhoneList = CreatePhoneList())
  1486.                                         {
  1487.                                             LONG Tmp = Selected,i;
  1488.  
  1489.                                             Selected = NumPhoneEntries - 1;
  1490.  
  1491.                                             CopyMem(Phonebook[Tmp] -> Header,Phonebook[Selected] -> Header,sizeof(struct PhoneHeader));
  1492.  
  1493.                                             Phonebook[Selected] -> Header -> QuickMenu = FALSE;
  1494.  
  1495.                                             SPrintf(Phonebook[Selected] -> Node -> LocalName,"      %s",Phonebook[Selected] -> Header -> Name);
  1496.  
  1497.                                             LT_SetAttributes(Handle,GAD_NAMELIST,
  1498.                                                 GTLV_Labels,        PhoneList,
  1499.                                                 GTLV_Selected,        Selected,
  1500.                                                 GTLV_Top,        Selected,
  1501.                                                 GTLV_MakeVisible,    Selected,
  1502.                                             TAG_DONE);
  1503.  
  1504.                                             SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1505.  
  1506.                                                 /* Allocate space for the config data. */
  1507.  
  1508.                                             for(i = PREF_SERIAL ; i <= PREF_EMULATION ; i++)
  1509.                                             {
  1510.                                                 if(GetConfigEntry(Phonebook[Tmp] -> Config,i))
  1511.                                                     CreateConfigEntry(Phonebook[Selected] -> Config,i);
  1512.                                             }
  1513.  
  1514.                                                 /* Copy the data. */
  1515.  
  1516.                                             SaveConfig(Phonebook[Tmp] -> Config,Phonebook[Selected] -> Config);
  1517.  
  1518.                                             RebuildMenu = PhonebookChanged = TRUE;
  1519.                                         }
  1520.                                         else
  1521.                                             goto ClearList;
  1522.                                     }
  1523.                                     else
  1524.                                         goto ClearList;
  1525.                                 }
  1526.  
  1527.                                 break;
  1528.  
  1529.                             case GAD_REMOVEENTRY:
  1530.  
  1531.                                 if(Selected != ~0)
  1532.                                 {
  1533.                                     if(Phonebook[Selected] == ChosenEntry)
  1534.                                         MyEasyRequest(PhoneWindow,LocaleString(MSG_PHONEPANEL_PHONE_ENTRY_IN_USE_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT));
  1535.                                     else
  1536.                                     {
  1537.                                         RebuildMenu = PhonebookChanged = TRUE;
  1538.  
  1539.                                         LT_SetAttributes(Handle,GAD_NAMELIST,
  1540.                                             GTLV_Labels,~0,
  1541.                                         TAG_DONE);
  1542.  
  1543.                                         if(PhoneList)
  1544.                                         {
  1545.                                             DeletePhoneList(PhoneList);
  1546.  
  1547.                                             PhoneList = NULL;
  1548.                                         }
  1549.  
  1550.                                         if(Phonebook[Selected] -> Count != -1)
  1551.                                         {
  1552.                                             RemoveDialEntry(Selected);
  1553.  
  1554.                                             Count--;
  1555.                                         }
  1556.  
  1557.                                         RemPhoneEntry(Selected);
  1558.  
  1559.                                         if(NumPhoneEntries > 0)
  1560.                                         {
  1561.                                             if(PhoneList = CreatePhoneList())
  1562.                                             {
  1563.                                                 if(Selected == NumPhoneEntries)
  1564.                                                     Selected--;
  1565.  
  1566.                                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1567.                                                     GTLV_Labels,    PhoneList,
  1568.                                                     GTLV_Selected,    Selected,
  1569.                                                 TAG_DONE);
  1570.                                             }
  1571.                                             else
  1572.                                                 goto ClearList;
  1573.  
  1574.                                             SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1575.                                         }
  1576.                                         else
  1577.                                         {
  1578. ClearList:                                        LT_SetAttributes(Handle,GAD_NAMELIST,
  1579.                                                 GTLV_Labels,    &EmptyList,
  1580.                                                 GTLV_Selected,    ~0,
  1581.                                             TAG_DONE);
  1582.  
  1583.                                             Selected = ~0;
  1584.  
  1585.                                             Count = 0;
  1586.  
  1587.                                             SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1588.                                         }
  1589.                                     }
  1590.                                 }
  1591.  
  1592.                                 break;
  1593.  
  1594.                             case GAD_NAME:
  1595.  
  1596.                                 if(Selected != ~0)
  1597.                                 {
  1598.                                     strcpy(Phonebook[Selected] -> Header -> Name,(STRPTR)LT_GetAttributes(Handle,GAD_NAME,TAG_DONE));
  1599.  
  1600.                                     LT_SetAttributes(Handle,GAD_NAMELIST,
  1601.                                         GTLV_Labels,~0,
  1602.                                     TAG_DONE);
  1603.  
  1604.                                     if(PhoneList)
  1605.                                         DeletePhoneList(PhoneList);
  1606.  
  1607.                                     if(PhoneList = CreatePhoneList())
  1608.                                     {
  1609.                                         LT_SetAttributes(Handle,GAD_NAMELIST,
  1610.                                             GTLV_Labels,        PhoneList,
  1611.                                             GTLV_Selected,        Selected,
  1612.                                             GTLV_Top,        Selected,
  1613.                                             GTLV_MakeVisible,    Selected,
  1614.                                         TAG_DONE);
  1615.                                     }
  1616.  
  1617.                                     if(!Phonebook[Selected] -> Header -> Name[0])
  1618.                                     {
  1619.                                         LT_SetAttributes(Handle,GAD_NAMELIST,
  1620.                                             GTLV_Labels,    ~0,
  1621.                                         TAG_DONE);
  1622.  
  1623.                                         if(Phonebook[Selected] -> Count != -1)
  1624.                                         {
  1625.                                             RemoveDialEntry(Selected);
  1626.  
  1627.                                             Count--;
  1628.                                         }
  1629.  
  1630.                                         LT_SetAttributes(Handle,GAD_NAMELIST,
  1631.                                             GTLV_Labels,        PhoneList,
  1632.                                             GTLV_Selected,        Selected,
  1633.                                             GTLV_Top,        Selected,
  1634.                                             GTLV_MakeVisible,    Selected,
  1635.                                         TAG_DONE);
  1636.                                     }
  1637.  
  1638.                                     SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1639.  
  1640.                                     RebuildMenu = PhonebookChanged = TRUE;
  1641.  
  1642.                                     if(MsgCode == '\r')
  1643.                                         LT_Activate(Handle,GAD_COMMENT);
  1644.                                 }
  1645.  
  1646.                                 break;
  1647.  
  1648.                             case GAD_COMMENT:
  1649.  
  1650.                                 if(Selected != ~0)
  1651.                                 {
  1652.                                     strcpy(Phonebook[Selected] -> Header -> Comment,(STRPTR)LT_GetAttributes(Handle,GAD_COMMENT,TAG_DONE));
  1653.  
  1654.                                     PhonebookChanged = TRUE;
  1655.  
  1656.                                     if(MsgCode == '\r')
  1657.                                         LT_Activate(Handle,GAD_PHONENUMBER);
  1658.                                 }
  1659.  
  1660.                                 break;
  1661.  
  1662.                             case GAD_QUICKMENU:
  1663.  
  1664.                                 if(Selected != ~0)
  1665.                                 {
  1666.                                     if(Phonebook[Selected] -> Header -> QuickMenu != MsgCode)
  1667.                                     {
  1668.                                         Phonebook[Selected] -> Header -> QuickMenu = MsgCode;
  1669.  
  1670.                                         RebuildMenu = PhonebookChanged = TRUE;
  1671.                                     }
  1672.                                 }
  1673.  
  1674.                                 break;
  1675.  
  1676.                             case GAD_PHONENUMBER:
  1677.  
  1678.                                 if(Selected != ~0)
  1679.                                 {
  1680.                                     strcpy(Phonebook[Selected] -> Header -> Number,(STRPTR)LT_GetAttributes(Handle,GAD_PHONENUMBER,TAG_DONE));
  1681.  
  1682.                                     PhonebookChanged = TRUE;
  1683.  
  1684.                                     if(!Phonebook[Selected] -> Header -> Number[0])
  1685.                                     {
  1686.                                         LT_SetAttributes(Handle,GAD_NAMELIST,
  1687.                                             GTLV_Labels,    ~0,
  1688.                                         TAG_DONE);
  1689.  
  1690.                                         if(Phonebook[Selected] -> Count != -1)
  1691.                                         {
  1692.                                             RemoveDialEntry(Selected);
  1693.  
  1694.                                             Count--;
  1695.                                         }
  1696.  
  1697.                                         LT_SetAttributes(Handle,GAD_NAMELIST,
  1698.                                             GTLV_Labels,        PhoneList,
  1699.                                         TAG_DONE);
  1700.                                     }
  1701.  
  1702.                                     SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1703.                                 }
  1704.  
  1705.                                 break;
  1706.  
  1707.                             case GAD_LOADLIST:
  1708.  
  1709.                                 LT_LockWindow(PhoneWindow);
  1710.  
  1711.                                 if(ChosenEntry)
  1712.                                     MyEasyRequest(PhoneWindow,LocaleString(MSG_PHONEPANEL_PHONE_ENTRY_IN_USE_LOAD_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT));
  1713.                                 else
  1714.                                 {
  1715.                                     SplitFileName(LastPhone,&DummyChar,DummyBuffer);
  1716.  
  1717.                                     if(FileRequest = GetFile(PhoneWindow,LocaleString(MSG_PHONEPANEL_LOAD_PHONEBOOK_TXT),DummyBuffer,DummyChar,DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_LOAD_TXT),TRUE))
  1718.                                     {
  1719.                                         LT_SetAttributes(Handle,GAD_NAMELIST,
  1720.                                             GTLV_Labels,    ~0,
  1721.                                             GTLV_Selected,    ~0,
  1722.                                         TAG_DONE);
  1723.  
  1724.                                         if(PhoneList)
  1725.                                             DeletePhoneList(PhoneList);
  1726.  
  1727.                                         if(!LoadPhonebook(DummyBuffer))
  1728.                                             ShowError(PhoneWindow,ERR_LOAD_ERROR,IoErr(),DummyBuffer);
  1729.                                         else
  1730.                                         {
  1731.                                             strcpy(LastPhone,DummyBuffer);
  1732.  
  1733.                                             PhonebookChanged = FALSE;
  1734.  
  1735.                                             RebuildMenu = TRUE;
  1736.                                         }
  1737.  
  1738.                                         if(PhoneList = CreatePhoneList())
  1739.                                         {
  1740.                                             LT_SetAttributes(Handle,GAD_NAMELIST,
  1741.                                                 GTLV_Labels,    PhoneList,
  1742.                                                 GA_Disabled,    FALSE,
  1743.                                             TAG_DONE);
  1744.  
  1745.                                             FreeDialList(TRUE);
  1746.                                         }
  1747.                                         else
  1748.                                         {
  1749.                                             LT_SetAttributes(Handle,GAD_NAMELIST,
  1750.                                                 GTLV_Labels,    &EmptyList,
  1751.                                                 GA_Disabled,    TRUE,
  1752.                                             TAG_DONE);
  1753.                                         }
  1754.  
  1755.                                         Selected = ~0;
  1756.  
  1757.                                         Count = 0;
  1758.  
  1759.                                         SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1760.  
  1761.                                         FreeAslRequest(FileRequest);
  1762.                                     }
  1763.                                 }
  1764.  
  1765.                                 LT_UnlockWindow(PhoneWindow);
  1766.  
  1767.                                 break;
  1768.  
  1769.                             case GAD_SORTLIST:
  1770.  
  1771.                                 if(NumPhoneEntries > 1)
  1772.                                 {
  1773.                                     RebuildMenu = PhonebookChanged = TRUE;
  1774.  
  1775.                                     LT_LockWindow(PhoneWindow);
  1776.  
  1777.                                     LT_SetAttributes(Handle,GAD_NAMELIST,
  1778.                                         GTLV_Labels,    ~0,
  1779.                                         GTLV_Selected,    ~0,
  1780.                                     TAG_DONE);
  1781.  
  1782.                                     Selected = ~0;
  1783.  
  1784.                                     SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1785.  
  1786.                                     if(PhoneList)
  1787.                                         DeletePhoneList(PhoneList);
  1788.  
  1789.                                     SortPhoneEntries();
  1790.  
  1791.                                     if(PhoneList = CreatePhoneList())
  1792.                                     {
  1793.                                         LT_SetAttributes(Handle,GAD_NAMELIST,
  1794.                                             GTLV_Labels,    PhoneList,
  1795.                                             GTLV_Selected,    ~0,
  1796.                                         TAG_DONE);
  1797.                                     }
  1798.                                     else
  1799.                                         Count = 0;
  1800.  
  1801.                                     LT_UnlockWindow(PhoneWindow);
  1802.                                 }
  1803.  
  1804.                                 break;
  1805.  
  1806.                             case GAD_SAVELIST:
  1807.  
  1808.                                 if(NumPhoneEntries)
  1809.                                 {
  1810.                                     SplitFileName(LastPhone,&DummyChar,DummyBuffer);
  1811.  
  1812.                                     LT_LockWindow(PhoneWindow);
  1813.  
  1814.                                     if(FileRequest = GetFile(PhoneWindow,LocaleString(MSG_PHONEPANEL_SAVE_PHONEBOOK_TXT),DummyBuffer,DummyChar,DummyBuffer,"#?.prefs",TRUE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SAVE_TXT),TRUE))
  1815.                                     {
  1816.                                         if(!SavePhonebook(DummyBuffer))
  1817.                                             ShowError(PhoneWindow,ERR_SAVE_ERROR,IoErr(),DummyBuffer);
  1818.                                         else
  1819.                                         {
  1820.                                             strcpy(LastPhone,DummyBuffer);
  1821.  
  1822.                                             PhonebookChanged = FALSE;
  1823.                                         }
  1824.  
  1825.                                         FreeAslRequest(FileRequest);
  1826.                                     }
  1827.  
  1828.                                     LT_UnlockWindow(PhoneWindow);
  1829.                                 }
  1830.  
  1831.                                 break;
  1832.  
  1833.                             case GAD_COPYCONFIG:
  1834.  
  1835.                                 LT_LockWindow(PhoneWindow);
  1836.  
  1837.                                 if(Selected == ~0)
  1838.                                     PhonebookChanged |= CopyPanel(NULL,Count > 0);
  1839.                                 else
  1840.                                 {
  1841.                                     PhonebookChanged |= CopyPanel(Phonebook[Selected] -> Config,Count > 0);
  1842.  
  1843.                                     LT_SetAttributes(Handle,GAD_EDIT,
  1844.                                         GTLV_Labels,    ~0,
  1845.                                     TAG_DONE);
  1846.  
  1847.                                     UpdateEditList(Phonebook[Selected] -> Config);
  1848.  
  1849.                                     LT_SetAttributes(Handle,GAD_EDIT,
  1850.                                         GTLV_Labels,    EditList,
  1851.                                     TAG_DONE);
  1852.                                 }
  1853.  
  1854.                                 LT_UnlockWindow(PhoneWindow);
  1855.  
  1856.                                 LT_ShowWindow(Handle,TRUE);
  1857.  
  1858.                                 break;
  1859.  
  1860.                             case GAD_PASSWORD:
  1861.  
  1862.                                 LT_LockWindow(PhoneWindow);
  1863.  
  1864.                                 {
  1865.                                     UBYTE SomeBuffer[30];
  1866.  
  1867.                                     memset(SomeBuffer,0,21);
  1868.  
  1869.                                     PhonePasswordUsed = FALSE;
  1870.  
  1871.                                     if(GetString(FALSE,TRUE,21,LocaleString(MSG_PHONEPANEL_PLEASE_ENTER_PASSWORD_TXT),SomeBuffer))
  1872.                                     {
  1873.                                         SomeBuffer[20] = 0;
  1874.  
  1875.                                         PhonebookChanged = TRUE;
  1876.  
  1877.                                         if(SomeBuffer[0])
  1878.                                         {
  1879.                                             UBYTE OtherBuffer[30];
  1880.  
  1881.                                             memset(OtherBuffer,0,21);
  1882.  
  1883.                                             if(GetString(FALSE,TRUE,21,LocaleString(MSG_PHONEPANEL_PLEASE_REPEAT_PASSWORD_TXT),OtherBuffer))
  1884.                                             {
  1885.                                                 OtherBuffer[20] = 0;
  1886.  
  1887.                                                 if(!memcmp(OtherBuffer,SomeBuffer,20))
  1888.                                                 {
  1889.                                                     Encrypt(OtherBuffer,20,PhonePassword,OtherBuffer,strlen(OtherBuffer));
  1890.  
  1891.                                                     PhonePasswordUsed = TRUE;
  1892.                                                 }
  1893.                                                 else
  1894.                                                     MyEasyRequest(PhoneWindow,LocaleString(MSG_PHONEPANEL_ERROR_ENTERING_PASSWORD_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT));
  1895.                                             }
  1896.                                             else
  1897.                                                 MyEasyRequest(PhoneWindow,LocaleString(MSG_PHONEPANEL_ERROR_ENTERING_PASSWORD_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT));
  1898.                                         }
  1899.                                     }
  1900.                                 }
  1901.  
  1902.                                 LT_ShowWindow(Handle,TRUE);
  1903.  
  1904.                                 LT_UnlockWindow(PhoneWindow);
  1905.                                 break;
  1906.  
  1907.                             case GAD_EDIT:
  1908.  
  1909.                                 if(Selected != ~0)
  1910.                                 {
  1911.                                     LT_LockWindow(PhoneWindow);
  1912.  
  1913.                                     switch(MsgCode)
  1914.                                     {
  1915.                                         case EDIT_RATES:
  1916.  
  1917.                                             if(Phonebook[Selected] == ChosenEntry)
  1918.                                                 MyEasyRequest(PhoneWindow,LocaleString(MSG_PHONEPANEL_PHONE_ENTRY_IN_USE_EDIT_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),DummyBuffer);
  1919.                                             else
  1920.                                             {
  1921.                                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1922.                                                     GTLV_Labels,    ~0,
  1923.                                                 TAG_DONE);
  1924.  
  1925.                                                 PhonebookChanged |= RatePanel(PhoneList,Phonebook[Selected]);
  1926.  
  1927.                                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1928.                                                     GTLV_Labels,    PhoneList,
  1929.                                                 TAG_DONE);
  1930.                                             }
  1931.  
  1932.                                             break;
  1933.  
  1934.                                         case EDIT_PASSWORD:
  1935.  
  1936.                                             PhonebookChanged |= PasswordUserPanel(Phonebook[Selected]);
  1937.                                             break;
  1938.  
  1939.                                         default:
  1940.  
  1941.                                             PhonebookChanged |= EditConfig(Phonebook[Selected] -> Config,MsgCode,PhoneWindow);
  1942.                                             break;
  1943.                                     }
  1944.  
  1945.                                     LT_SetAttributes(Handle,GAD_EDIT,
  1946.                                         GTLV_Labels,    ~0,
  1947.                                     TAG_DONE);
  1948.  
  1949.                                     UpdateEditList(Phonebook[Selected] -> Config);
  1950.  
  1951.                                     LT_SetAttributes(Handle,GAD_EDIT,
  1952.                                         GTLV_Labels,    EditList,
  1953.                                     TAG_DONE);
  1954.  
  1955.                                     LT_UnlockWindow(PhoneWindow);
  1956.  
  1957.                                     LT_ShowWindow(Handle,TRUE);
  1958.                                 }
  1959.  
  1960.                                 break;
  1961.  
  1962.                             case GAD_DIALLIST:
  1963.  
  1964.                                 if(!Count && Selected != ~0)
  1965.                                 {
  1966.                                     LT_SetAttributes(Handle,GAD_NAMELIST,
  1967.                                         GTLV_Labels,    ~0,
  1968.                                     TAG_DONE);
  1969.  
  1970.                                     SPrintf(Phonebook[Selected] -> Node -> LocalName,"      %s",Phonebook[Selected] -> Header -> Name);
  1971.  
  1972.                                     Phonebook[Selected] -> Count = Count++;
  1973.  
  1974.                                     LT_SetAttributes(Handle,GAD_NAMELIST,
  1975.                                         GTLV_Labels,    PhoneList,
  1976.                                     TAG_DONE);
  1977.                                 }
  1978.  
  1979.                                 if(Count > 0)
  1980.                                 {
  1981.                                     DialTheList    = TRUE;
  1982.                                     Done        = TRUE;
  1983.                                 }
  1984.  
  1985.                                 break;
  1986.  
  1987.                             case GAD_CANCEL:
  1988.  
  1989.                                 FreeDialList(TRUE);
  1990.  
  1991.                                 Done = TRUE;
  1992.  
  1993.                                 break;
  1994.                         }
  1995.                     }
  1996.  
  1997.                     if(MsgClass == IDCMP_IDCMPUPDATE && MsgGadget -> GadgetID == GAD_NAMELIST)
  1998.                     {
  1999.                         if(!(MsgQualifier & (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT)) && !Online)
  2000.                         {
  2001.                             Selected = MsgCode;
  2002.  
  2003.                             LT_SetAttributes(Handle,GAD_NAMELIST,
  2004.                                 GTLV_Labels,    ~0,
  2005.                             TAG_DONE);
  2006.  
  2007.                             Count = 1;
  2008.  
  2009.                             for(i = 0 ; i < NumPhoneEntries ; i++)
  2010.                             {
  2011.                                 if(i != Selected)
  2012.                                 {
  2013.                                     SPrintf(Phonebook[i] -> Node -> LocalName,"      %s",Phonebook[i] -> Header -> Name);
  2014.  
  2015.                                     Phonebook[i] -> Count = -1;
  2016.                                 }
  2017.                                 else
  2018.                                 {
  2019.                                     SPrintf(Phonebook[i] -> Node -> LocalName,"  1 - %s",Phonebook[i] -> Header -> Name);
  2020.  
  2021.                                     Phonebook[i] -> Count = 0;
  2022.                                 }
  2023.                             }
  2024.  
  2025.                             DialTheList    = TRUE;
  2026.                             Done        = TRUE;
  2027.  
  2028.                             LT_PressButton(Handle,GAD_DIALLIST);
  2029.                         }
  2030.                     }
  2031.                 }
  2032.             }
  2033.             while(!Done);
  2034.  
  2035.             PopWindow();
  2036.         }
  2037.  
  2038.         LT_DeleteHandle(Handle);
  2039.     }
  2040.  
  2041.     if(PhonebookChanged)
  2042.         RebuildMenu = TRUE;
  2043.  
  2044.     FreeDialList(TRUE);
  2045.  
  2046.     if(PhoneList)
  2047.     {
  2048.         if(Count > 0)
  2049.         {
  2050.             TempNode = (struct PhoneNode *)PhoneList -> lh_Head;
  2051.  
  2052.             while(TempNode -> VanillaNode . ln_Succ)
  2053.             {
  2054.                 if(TempNode -> Entry -> Count != -1)
  2055.                     SortToList(TempNode);
  2056.  
  2057.                 TempNode = (struct PhoneNode *)TempNode -> VanillaNode . ln_Succ;
  2058.             }
  2059.  
  2060.             if(!DialList)
  2061.                 DialTheList = FALSE;
  2062.         }
  2063.  
  2064.         DeletePhoneList(PhoneList);
  2065.     }
  2066.  
  2067.     return(DialTheList);
  2068. }
  2069.